home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zk.d64 / txt.ffloat < prev    next >
Text File  |  2007-03-01  |  3KB  |  130 lines

  1. ╞╧╥═┴╘╘┼─ ╞╠╧┴╘╔╬╟ ╨╧╔╬╘
  2.  
  3. BY ─ICK ╦LINGENS
  4. ─UTCH ├╧═┴╠ ╒SERS ╟ROUP
  5.  
  6. ┴FTER READING THE ╤LINK SECTION IN
  7. ├╧═┴╠ ╘╧─┴┘ #15, ESPECIALLY THE ITEMS
  8. ON ╨╥╔╬╘ ╒╙╔╬╟, ╔ DEVELOPED A
  9. FUNCTION THAT PRINTS A NUMBER IN A
  10. FLOATING POINT FORMAT. ╘HE FUNCTION
  11. RETURNS THE NUMBER IN A STRING USING
  12. THE SCIENTIFIC NUMBER NOTATION, SUCH
  13. AS
  14.  
  15.    1.23456789E-10
  16.  
  17. BUT THE NUMBER OF DECIMAL PLACES CAN
  18. BE SET IN THE FUNCTION CALL.
  19.  
  20. ╘HE FUNCTION FIRST ISOLATES THE
  21. INTEGER PART (THE MOST SIGNIFICANT
  22. DIGIT) TOGETHER WITH THE MANTISSA AND
  23. AFTER THAT THE EXPONENT OF THE
  24. NUMBER.
  25.  
  26. ╘HE MANTISSA IS ROUNDED WITH THE
  27. WANTED NUMBER OF DECIMAL PLACES AND
  28. ASSIGNED TO A STRING WHICH IS
  29. EXTENDED WITH THE EXPONENT.
  30.  
  31. ╚ERE FOLLOWS THE FUNCTION:
  32.  
  33. ╞╒╬├ FFLOAT$(NUMBER,N) ├╠╧╙┼─
  34.   MAXDEC:=8 // SEE ╬OTE 1
  35.   ╔╞ N<1 ╧╥ N>MAXDEC ╘╚┼╬
  36.     ╥┼╨╧╥╘ 1 // ┴RGUMENT ERROR
  37.   ┼╬─╔╞
  38.   //
  39.   ─╔═ F$ ╧╞ 1+1+1+N+1+3
  40.   //
  41.   //        1 : SIGN (OR SPACE)
  42.   //        1 : INTEGER PART
  43.   //        1 : DECIMAL POINT
  44.   //        N : DECIMAL PART
  45.   //        1 : 'E'
  46.   //        3 : SIGNED EXPONENT
  47.   //
  48.   SIGNUM:=╙╟╬(NUMBER)
  49.   NUMBER:=┴┬╙(NUMBER)
  50.   ╔╞ NUMBER>0 ╘╚┼╬
  51.     EXPON:=╔╬╘(╠╧╟(NUMBER)/╠╧╟(10))
  52.   ┼╠╙┼ 
  53.     EXPON:=0
  54.   ┼╬─╔╞ 
  55.   NUMBER:=NUMBER/(10XPON)
  56.   SIGEX:=╙╟╬(EXPON)
  57.   EXPON:=┴┬╙(EXPON)
  58.   FACT:=10
  59.   // ╥OUNDING NOW:
  60.   NUMBER:=╔╬╘(NUMBER*FACT+.5)/FACT
  61.   F$:=╙╘╥$(NUMBER)
  62.   // ╙EE ╬OTE 2
  63.   ╔╞ ╬╧╘ "." ╔╬ F$ ╘╚┼╬ F$:=F$+"."
  64.   ╔╞ SIGNUM=-1 ╘╚┼╬ // ╙EE ╬OTE 3
  65.     F$:="-"+F$
  66.   ┼╠╙┼ 
  67.    F$:=" "+F$
  68.   ┼╬─╔╞ 
  69.   ╫╚╔╠┼ ╠┼╬(F$)<3+N ─╧ // ╙EE ╬OTE 4
  70.     F$:=F$+"0"
  71.   ┼╬─╫╚╔╠┼ 
  72.   F$:=F$+"E"
  73.   ╔╞ SIGEX=-1 ╘╚┼╬ // ╙EE ╬OTE 5
  74.     F$:=F$+"-"
  75.   ┼╠╙┼ 
  76.     F$:=F$+"+"
  77.   ┼╬─╔╞ 
  78.   // ╙EE ╬OTE 6
  79.   F$:=F$+╙╘╥$(100+EXPON)(2:3)
  80.   ╥┼╘╒╥╬ F$
  81. ┼╬─╞╒╬├ FFLOAT$
  82.  
  83. ╙OME ADDITIONAL NOTES.
  84.  
  85. 1. ╘HE NUMBER OF DECIMALS (N IN THE
  86.    FUNCTION HEADER) IS LIMITED UP TO
  87.    8 BECAUSE OF INTERNAL
  88.    SIGNIFICANCE.
  89.  
  90. 2. ╙OME NUMBERS EVALUATE INTO A
  91.    FLOATING POINT NUMBER WITHOUT A
  92.    DECIMAL POINT. ┼XAMPLE:
  93.  
  94.    N:=1999999999
  95.    ╨╥╔╬╘ N
  96.  
  97.    WITH OUTPUT
  98.  
  99.    2E+10
  100.  
  101.    ┴FTER ASSIGNING THE NUMBER TO THE
  102.    STRING A TEST IS DONE ON THAT
  103.    DECIMAL POINT. ╔F THERE IS NOT, IT
  104.    IS ADDED TO THE STRING.
  105.  
  106. 3. ╔F THE NUMBER IS NEGATIVE A
  107.    LEADING MINUS IS PRINTED; IF NOT A
  108.    SPACE.
  109.  
  110. 4. ╔F NECESSARY THE DECIMAL PART IS
  111.    EXTENDED WITH ZERO'S UPTO THE
  112.    WANTED NUMBER OF DECIMALS.
  113.  
  114. 5. ╘HE EXPONENT ALWAYS STARTS WITH
  115.    ITS SIGN (+ OR -).
  116.  
  117. 6. ╘HE EXPONENT FORMAT IS ACHIEVED IN
  118.    A SPECIAL WAY:
  119.  
  120.    FIRST ADDING 100 TO THE EXPONENT'S
  121.    VALUE AND THEN USING ONLY THE
  122.    SECOND AND THIRD CHARACTER. ╙O IF
  123.    NECESARY THERE IS ALWAYS A LEADING
  124.    ZERO. ╙UCH AS:
  125.  
  126.    EXPONENT$=╙╘╥$(100+EXPON)(2:3)
  127.  
  128.    MAKING USE OF THE SPECIAL 2.0
  129.    STRING HANDLING FACILITIES.
  130.